package com.twang.stock.service;

import com.twang.stock.dto.ReviewCompleteRequest;
import com.twang.stock.dto.ReviewResponse;
import com.twang.stock.entity.CourseItem;
import com.twang.stock.entity.ReviewSchedule;
import com.twang.stock.mapper.CourseItemMapper;
import com.twang.stock.mapper.ReviewScheduleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

@Service
public class ReviewService {
   //艾宾浩斯复习间隔（单位：分钟）
    private static final int[] INTERVALS = {5, 30, 720, 1440, 2880, 4320, 10080, 20160};

    @Resource
    private ReviewScheduleMapper reviewScheduleMapper; // 使用 MyBatis Mapper

    @Resource
    private CourseItemMapper courseItemMapper; // 假设 CourseItemRepository 仍然是 JPA 实现

    // 处理用户完成复习的逻辑
    public ReviewResponse handleReviewCompletion(ReviewCompleteRequest request) {
        // 1. 更新复习计划
        ReviewSchedule schedule = reviewScheduleMapper.findByUserIdAndItemId(request.getUserId(), request.getItemId());
        if (schedule == null) {
            schedule = new ReviewSchedule(); // 如果不存在，则创建新的复习计划
        }

        updateReviewSchedule(schedule, request);

        // 2. 获取需要复习的条目
        List<CourseItem> reviewItems = getDueReviewItems(request.getUserId());

        // 3. 获取新学习的条目
        CourseItem newItem = getNextNewItem(request.getUserId());

        // 4. 返回结果
        return new ReviewResponse(newItem, reviewItems);
    }

    // 更新复习计划
    private void updateReviewSchedule(ReviewSchedule schedule, ReviewCompleteRequest request) {
        Date now = new Date(); // 使用 Date 类型
        int currentStage = schedule.getStage();

        // 设置复习计划的基本信息
        schedule.setUserId(request.getUserId());
        schedule.setItemId(request.getItemId());
        schedule.setReviewCount(schedule.getReviewCount() + 1); // 复习次数+1
        schedule.setLastReviewTime(now); // 更新最后一次复习时间

        // 根据当前阶段设置下次复习时间
        if (currentStage < INTERVALS.length) {
            // 计算下次复习时间
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(now);
            calendar.add(Calendar.MINUTE, INTERVALS[currentStage]); // 添加间隔时间
            schedule.setNextReviewTime(calendar.getTime()); // 设置为 Date 类型
            schedule.setStage(currentStage + 1); // 进入下一阶段
        } else {
            schedule.setNextReviewTime(null); // 已完成所有阶段
        }

        // 保存复习计划
        reviewScheduleMapper.save(schedule);
    }

    // 获取需要复习的条目
    private List<CourseItem> getDueReviewItems(Integer userId) {
        return courseItemMapper.findDueReviewItems(userId, new Date());
    }

    // 获取下一个新学习的条目
    private CourseItem getNextNewItem(Integer userId) {
        return courseItemMapper.findNextNewItem(userId);
    }
}
